package com.asf.sofom.controller;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.validation.Valid;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.SessionAttributes;
import org.springframework.web.servlet.ModelAndView;

import com.asf.sofom.domain.OEcivil;
import com.asf.sofom.domain.OEstatus;
import com.asf.sofom.domain.OFiguraJuridica;
import com.asf.sofom.domain.OGenero;
import com.asf.sofom.domain.OPersona;
import com.asf.sofom.domain.OTidentificacion;
import com.asf.sofom.domain.Persona;
import com.asf.sofom.repository.EcivilDao;
import com.asf.sofom.repository.EstatusDao;
import com.asf.sofom.repository.FiguraJuridicaDao;
import com.asf.sofom.repository.GeneroDao;
import com.asf.sofom.repository.TidentificacionDao;
import com.asf.sofom.service.PersonaManager;


@Controller
@SessionAttributes
@RequestMapping(value="/registrapersona")
public class RegistraPersonaFormController {

	@Autowired
	private PersonaManager personaManager;	
	@Autowired
	private EstatusDao estatusDao;	
	@Autowired
	private EcivilDao ecivilDao;
	@Autowired
	private GeneroDao generoDao;
	@Autowired
	private FiguraJuridicaDao fijuraJuridicaDao;
	@Autowired
	private TidentificacionDao tidentificacionDao;
	
	@RequestMapping(method = RequestMethod.POST, params = "Guardar")
	public String registraPersona(@Valid Persona persona, BindingResult result){	
		if(result.hasErrors()){
			return "/registrapersona";
		}
		
		OPersona opersona = new OPersona();
		//System.out.println(persona.getNombre());
		//System.out.println(persona.getApellidop());
		//System.out.println(persona.getApellidom());
		
		opersona.setApellido_m(persona.getApellidom());
		opersona.setApellido_p(persona.getApellidop());
		opersona.setCuenta_local(000);
		opersona.setCurp(persona.getCurp());
		opersona.setDescuento(0.0);
		opersona.setEmail(persona.getEmail());
		opersona.setEstado_civil(persona.getEstado_civil());
		//opersona.setEstado_civil(1);
		opersona.setFecha_alta(persona.getFecha_alta());
		opersona.setFecha_nac(persona.getFecha_nac());
		opersona.setFigura_juridica(persona.getFigura_juridica());
		//opersona.setFigura_juridica(1);
		opersona.setGenero(persona.getGenero());
		//opersona.setGenero(1);
		//opersona.setId_usuario_web(persona.getId_usuario_web());
		//System.out.println(opersona.getId_usuario_web());
		opersona.setLugar_nac(persona.getLugar_nac());
		opersona.setNacionalidad(persona.getNacionalidad());
		opersona.setNo_identificacion(persona.getNo_identificacion());
		opersona.setNombre(persona.getNombre());
		opersona.setNotas(persona.getNotas());
		opersona.setRegion(persona.getRegion());
		opersona.setRfc(persona.getRfc());
		opersona.setEstatus(persona.getStatus());
		opersona.setTelefono1(persona.getTelefono1());
		opersona.setTelefono2(persona.getTelefono2());
		opersona.setTipo_identificacion(persona.getTipo_identificacion());
		opersona.setTipo_ingreso(persona.getTipo_ingreso());
		
		//System.out.println("TT" + opersona.getEstatus());
		personaManager.guardarPersona(opersona);
		
		return "redirect:/admin";
	}

	@RequestMapping(method = RequestMethod.POST, params = "Cancelar")
	public String cancelar(){
		return "redirect:admin";
	}
	
	@RequestMapping(method = RequestMethod.GET)
	public ModelAndView loadForm() {
	    Persona persona = new Persona();
	    //persona.setNombre("Ho0000ola");

        ModelAndView mv = new ModelAndView();
        mv.setViewName("registrapersona");
        mv.addObject("persona", persona);
        
        Map< String, String > estatusList = new HashMap<String, String>();
        List<OEstatus> lestatus = estatusDao.getEstatus();        
        for(int i = 0; i<lestatus.size(); i++){
        	estatusList.put(lestatus.get(i).getId_status().toString(), lestatus.get(i).getNombre_estatus());
        }
 
        Map< String, String > ecivilList = new HashMap<String, String>();
        List<OEcivil> lecivil = ecivilDao.getEcivil();
        for(int i = 0; i<lecivil.size(); i++){
        	ecivilList.put(lecivil.get(i).getId_ecivil().toString(), lecivil.get(i).getDescripcion());
        }

        Map< String, String > generoList = new HashMap<String, String>();
        List<OGenero> lgenero = generoDao.getGenero();
        for(int i = 0; i<lgenero.size(); i++){
        	generoList.put(lgenero.get(i).getId_genero().toString(), lgenero.get(i).getDescripcion());
        }
        
        Map< String, String > figuraList = new HashMap<String, String>();
        List<OFiguraJuridica> lfigura = fijuraJuridicaDao.getFigura();
        for(int i = 0; i<lfigura.size(); i++){
        	figuraList.put(lfigura.get(i).getId_figura().toString(), lfigura.get(i).getDescripcion());
        }
        
        Map< String, String > identificacionList = new HashMap<String, String>();
        List<OTidentificacion> lidentificacion = tidentificacionDao.getTidentificacion();
        for(int i = 0; i<lidentificacion.size(); i++){
        	identificacionList.put(lidentificacion.get(i).getId_tidentificacion().toString(), lidentificacion.get(i).getDescipcion());
        }              
        
        mv.addObject("estatusList", estatusList);
        mv.addObject("ecivilList", ecivilList);
        mv.addObject("generoList", generoList);
        mv.addObject("figuraList", figuraList);
        mv.addObject("identificacionList", identificacionList);
        return mv;
	}
	
    public void setPersonaManager(PersonaManager personaManager){
    	this.personaManager = personaManager;
    }
    
    public PersonaManager getPersonaManager(){
    	return personaManager;
    }
	
}
